netfilter: x_tables: check for size overflow
authorFlorian Westphal <fw@strlen.de>
Thu, 10 Mar 2016 00:56:23 +0000 (01:56 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 17 Mar 2016 01:25:23 +0000 (01:25 +0000)
Ben Hawkes says:
 integer overflow in xt_alloc_table_info, which on 32-bit systems can
 lead to small structure allocation and a copy_from_user based heap
 corruption.

Reported-by: Ben Hawkes <hawkes@google.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Gbp-Pq: Topic bugfix/all
Gbp-Pq: Name netfilter-x_tables-check-for-size-overflow.patch

net/netfilter/x_tables.c

index d4aaad747ea99b0aa877016f437a5fd46ec768ee..d3e3544ae424be5a7ff2b1a7dac4067bc1b9fc18 100644 (file)
@@ -658,6 +658,9 @@ struct xt_table_info *xt_alloc_table_info(unsigned int size)
        struct xt_table_info *info = NULL;
        size_t sz = sizeof(*info) + size;
 
+       if (sz < sizeof(*info))
+               return NULL;
+
        /* Pedantry: prevent them from hitting BUG() in vmalloc.c --RR */
        if ((SMP_ALIGN(size) >> PAGE_SHIFT) + 2 > totalram_pages)
                return NULL;